package com.kgc.scd.service;

import com.kgc.scd.bean.Coupon;
import com.kgc.scd.bean.CouponInn;
import com.kgc.scd.bean.CouponUser;
import com.kgc.scd.bean.OrderItemResult;
import com.kgc.scd.util.PageSupport;

import java.util.List;
import java.util.Map;

/**
 * Created On : 2022/6/13.
 * <p>
 * Author     : nainai
 * <p>
 * Description: 优惠券业务接口
 */
public interface CouponService {

    /**
     * @author : nainai
     * @date   : 2022/6/13
     * @param  : [java.lang.Integer]
     * @return : java.util.List<com.kgc.scd.bean.Coupon>
     * @description : 根据优惠券种类，查询优惠券详情，cid为0的为必查
     */
    PageSupport<Coupon> queryCouponByCidAndCidZeroPage(Integer cid, Integer pageNo, Integer pageSize);

    /**
     * @author : nainai
     * @date   : 2022/6/13
     * @param  : [java.lang.Integer]
     * @return : java.util.List<com.kgc.scd.bean.Coupon>
     * @description : 根据用户编号，查询用户已有优惠券，包括已过期优惠券
     */
    List<CouponUser> queryCouponsByUid(String userId);

    /**
     * @author : nainai
     * @date   : 2022/6/13
     * @param  : [java.lang.String]
     * @return : boolean
     * @description : 对用户已过期的优惠券进行状态修改
     */
    boolean checkUserCouponPast(String userId);

    
    /**
     * @author : nainai
     * @date   : 2022/6/13
     * @param  : [java.lang.Integer]
     * @return : java.util.Date
     * @description : 根据优惠券编号，查询优惠券有效天数
     */
    Integer queryExpireTimeById(Integer id);

    /**
     * @author : nainai
     * @date   : 2022/6/15
     * @param  : [java.lang.String, java.lang.String]
     * @return : java.util.List<com.kgc.scd.bean.Coupon>
     * @description : 查询订单可用优惠券 
     */
    List<Coupon> queryOrderCoupons(String userId, String orderId);

    /**
     * @author : nainai
     * @date   : 2022/6/14
     * @param  : [java.util.List<com.kgc.scd.bean.Coupon>]
     * @return : boolean
     * @description : 添加优惠券
     */
    boolean addCoupons(List<Coupon> couponList);

    /**
     * @author : nainai
     * @date   : 2022/6/14
     * @param  : [java.util.List<java.lang.Integer>]
     * @return : boolean
     * @description : 删除优惠券
     */
    boolean delCoupons(List<Integer> ids);

    /**
     * @author : nainai
     * @date   : 2022/6/14
     * @param  : [java.lang.String]
     * @return : boolean
     * @description : 根据优惠券名称，查询优惠券详情
     */
    List<Coupon> selectCouponsByName(String couName);
    
    /**
     * @author : nainai
     * @date   : 2022/6/14
     * @param  : [java.lang.Integer]
     * @return : com.kgc.scd.bean.Coupon
     * @description : 根据优惠券编号，查询优惠券详情 
     */
    Coupon selectCouponById(Integer id);
    
    /**
     * @author : nainai
     * @date   : 2022/6/14
     * @param  : [com.kgc.scd.util.UserAnno, java.lang.Integer]
     * @return : boolean
     * @description : 用户领取优惠券 
     */
    Map<String, String> userGetCoupon(String userId, Integer coId);

    /**
     * @author : nainai
     * @date   : 2022/6/15
     * @param  : [java.lang.String]
     * @return : java.util.List<com.kgc.scd.bean.OrderItemResult>
     * @description : 根据订单编号，获取订单详情 
     */
    List<OrderItemResult> getOrderItemResult(String orderId);
    
    /**
     * @author : nainai
     * @date   : 2022/6/15
     * @param  : [java.lang.Integer]
     * @return : boolean
     * @description : 修改优惠券状态（启用、未启用） 
     */
    boolean changeCouponStatus(List<Integer> coids, Integer status);

    /**
     * @author : nainai
     * @date   : 2022/6/15
     * @param  : [java.lang.String, java.lang.Integer]
     * @return : boolean
     * @description : 修改用户优惠券状态为已使用
     */
    boolean changeUserCouponStatus(Integer innerId);

    /**
     * @author : nainai
     * @date   : 2022/6/16
     * @param  : [java.lang.String, java.util.List<java.lang.Integer>]
     * @return : java.util.List<com.kgc.scd.bean.CouponInn>
     * @description : 根据优惠券id和用户id，返回可用
     */
    List<CouponInn> queryCouponInn(String userId, List<Coupon> coupons);

}

